
#ifndef __TYPE_TRAITS_H__
#define __TYPE_TRAITS_H__

//-----------------

template < typename type > struct remove_reference { typedef type type ; }; 
template < typename type > struct remove_reference < type & > { typedef type type ; } ;

template < typename type > struct is_reference { static const bool value = false ; } ; 
template < typename type > struct is_reference < type & > { static const bool value = true ; } ; 

//-----------------

template < typename type > struct remove_pointer { typedef type type ; }; 
template < typename type > struct remove_pointer < type * > { typedef type type ; } ;

template < typename type > struct is_pointer { static const bool value = false ; } ; 
template < typename type > struct is_pointer < type * > { static const bool value = true ; } ; 

//-----------------

#endif	// #ifndef __TYPE_TRAITS_H__